/**
 * 认证请求工具
 * 封装带有自动重新登录功能的云函数调用
 */
import { callCloudFunction, checkTokenExpired } from './cloudRequest.js';
import { ensureLogin } from './auth.js';

/**
 * 封装的带有自动重新登录功能的云函数调用
 * 如果token过期，会自动重新登录并重试请求
 * 
 * @param {String} name - 云函数名称
 * @param {Object} data - 请求参数
 * @param {Function} onTokenExpired - token过期时的回调函数（可选）
 * @param {String} redirectUrl - 登录失败时跳转的页面（可选，默认为'/pages/minePages/mine'）
 * @returns {Promise} - 云函数返回结果
 */
export const authRequest = async (name, data = {}, onTokenExpired = null, redirectUrl = '/pages/minePages/mine') => {
  try {
    // 调用云函数
    const res = await callCloudFunction(name, data);
    
    // 检查是否 token 过期
    if (checkTokenExpired(res.result)) {
      // 如果有自定义的token过期回调，则执行
      if (onTokenExpired) {
        onTokenExpired();
      } else {
        uni.showToast({ title: '登录已过期，请重新登录', icon: 'none' });
      }
      
      // 使用封装的登录函数自动重新登录
      const loginSuccess = await ensureLogin();
      if (loginSuccess) {
        // 重新调用云函数
        return await callCloudFunction(name, data);
      } else {
        // 登录失败，跳转到指定页面
        uni.navigateTo({ url: redirectUrl });
        throw new Error('登录失败');
      }
    }
    
    // 返回结果
    return res;
  } catch (error) {
    console.error(`调用云函数 ${name} 失败:`, error);
    throw error;
  }
};
